/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年8月9日
 * 项目： rainhy-config
 */
package com.rainhy.config.manager.xml;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;

import com.rainhy.config.manager.ConfigContextParse;
import com.rainhy.config.manager.ConfigGroupParse;
import com.rainhy.config.manager.ConfigPropertyParse;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

/**
 * 配置内容
 * 
 * @author rain
 * @version [版本号, 2016年8月9日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@XStreamAlias("configContext")
public class ConfigContextXmlParse implements ConfigContextParse {
    /** 子级属性组 */
    @XStreamImplicit(itemFieldName = "configGroup")
    private List<ConfigGroupXmlParse> xmlConfigGroups;
    
    /** 配置属性 */
    @XStreamImplicit(itemFieldName = "config")
    private List<ConfigPropertyXmlParse> xmlConfigs;
    
    /** 状态:true可见 false不可见(默认可见) */
    @XStreamAsAttribute
    private Boolean viewAble = Boolean.TRUE;
    
    /** 子级属性组 */
    @Override
    public List<ConfigGroupParse> getConfigGroups() {
        List<ConfigGroupParse> list = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(xmlConfigGroups)) {
            for (ConfigGroupXmlParse configGroupXmlParse : this.xmlConfigGroups) {
                list.add(configGroupXmlParse);
            }
        }
        return list;
    }
    
    /** 配置属性 */
    @Override
    public List<ConfigPropertyParse> getConfigs() {
        List<ConfigPropertyParse> list = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(xmlConfigs)) {
            for (ConfigPropertyXmlParse configPropertyParse : this.xmlConfigs) {
                list.add(configPropertyParse);
            }
        }
        return list;
    }
    
    /** 状态:true可见 false不可见(默认可见) */
    @Override
    public boolean isViewAble() {
        return this.viewAble == null ? true : this.viewAble.booleanValue();
    }
    
}
